// scripts/utils/RandomUtils.ts 或 scripts/utils/SeedRandom.ts

/**
 * 确定性随机数生成器（伪随机）
 * 使用线性同余法 (LCG)，适用于需要“固定种子”的场景（如回放、同步、测试）
 *
 * 参数说明：
 * - a = 9301  (乘数)
 * - c = 49297 (增量)
 * - m = 233280 (模数)
 * 来源：Numerical Recipes in C
 */

let seed: number = 0;

/**
 * 初始化随机种子
 * @param s 随机种子，可选。如果不传，则使用 Math.random() 生成
 */
export function initSeed(s?: number): void {
  seed = s !== undefined ? s : Math.floor(Math.random() * 100000000);
}

/**
 * 生成下一个 [0, 1) 区间的伪随机数
 * @returns 浮点数，范围 [0, 1)
 */
export function nextRandom(): number {
  seed = (seed * 9301 + 49297) % 233280;
  return seed / 233280.0;
}

/**
 * 生成指定范围的随机整数 [min, max)
 */
export function randomInt(min: number, max: number): number {
  return Math.floor(nextRandom() * (max - min)) + min;
}

/**
 * 生成 [0, 1) 的随机浮点数
 */
export function randomFloat(): number {
  return nextRandom();
}

//----------------------------------使用示例----------------------------------
// // 导入
// import {
//   initSeed,
//   nextRandom,
//   randomInt,
//   randomFloat,
// } from "utils/RandomUtils";

// // 初始化种子（例如从服务器获取）
// initSeed(123456);

// // 使用
// console.log(nextRandom()); // 0.123...
// console.log(randomInt(1, 10)); // 3（每次运行结果一致）
// console.log(randomFloat()); // [0,1) 浮点数
